# -*- coding: utf-8 -*-
import sys
from IMovible import *
from IPosturaCambiable import *
from IImprimible import *
from ITener import *

class Heroe(IMovible, IPosturaCambiable, IImprimible, ITener):
	
	"""
	Esta clase representa al protagonista en la solucion de un problema en el paradigma ABJ. Puede cambiar de postura, tiene una representacion grafica y puede contener (guardar en mochila) algunos objetos del problema.
	@since: 4/14/2011
	@version: 1.0
	"""
	
	_nombre = ""
	""" Variable de instancia que contiene el nombre del heroe """
	
	_mano_derecha = 0
	""" Variable de instancia que indica la capacidad de la mano derecha del heroe """
	
	_mano_izquierda = 0
	""" Variable de instancia que indica la capacidad de la mano izquierda del heroe """
	
	def __init__(self, nu_nombre, elementos={}, capacidad=20):
		
		"""
		Constructor de la clase Heroe.
		@type	self: Heroe
		@param	self: referencia al objeto actual
		
		@type	nu_nombre: string
		@param	nu_nombre: nuevo nombre del Heroe
		
		@type	elementos: diccionario
		@param	elementos: objetos que contiene el Heroe
		
		@type	capacidad: numero
		@param	capacidad: tolerancia para elementos
		"""
		
		self._nombre = nu_nombre
		ITener.__init__(self, capacidad, elementos)
		IPosturaCambiable.__init__(self)
	
	def getNombre(self):
		
		"""
		Obtiene el nombre del heroe.
		@type	self: Heroe
		@param	self: referencia al objeto actual
		"""
		return self._nombre
		
	def setNombre(self, nu_nombre):
		
		"""
		Permite definir el nombre al Heroe.
		@type	self: Heroe
		@param	self: referencia al objeto actual
		
		@type	nu_nombre: string
		@param	nu_nombre: Nuevo nombre del Heroe
		"""
		self._nombre = nu_nombre
		
	def __str__( self ):
		
		"""
		Obtiene una descripcion en caracteres del Heroe (toString caso 1).
		@type	self: Heroe
		@param	self: referencia al objeto actual
		"""
		return "Heroe(nombre=" + self._nombre + ", postura=" + str(IPosturaCambiable.getPostura(self)) + ")"
	
	def __repr__(self):
		
		"""
		Obtiene una descripcion en caracteres del Heroe (toString caso 2).
		@type	self: Heroe
		@param	self: referencia al objeto actual
		"""
		return "Heroe(nombre=" + self._nombre + ", postura=" + str(IPosturaCambiable.getPostura(self)) + ")"